OleDB query's en Foxpro

Status
Niet open voor verdere reacties.

Rashura

Gebruiker
Lid geworden
25 jan 2008
Berichten
16
Beste mensen,

ik heb een test applicatie die een .ini bestand leest en bepaalde regels code daaruit haalt om updates uit te voeren op DBF tabellen.
Hiervoor gebruik ik dus OleDB query's aangezien deze foxpro code ondersteunen (althans dat denk ik).
Zodra ik een query opbouw met verschillende variabelen en de foxpro code erin zet krijg ik helaas een syntax error.

Voorbeeld query:

UPDATE TABEL1 SET FIELD1 = &(UPPER(TRIM(TABEL2->CITY))) WHERE RECID = '1'

Waar het dikgedrukte gedeelte de geimporteerde foxpro code is.
Nou heb ik geen ervaring met de OleDB syntax en heb ik tot dusver aangenomen dat het overeenkomt met Sql... zou iemand mij wat kunnen ophelderen?:)
 
Helaas heb ik niets kunnen vinden in deze documentatie wat met mijn probleem heeft te maken...:confused:

Ik heb een .ini bestand met foxpro code deze lees ik en wil sommige regels die hierin staan in VB.net laten uitvoeren op 2 los staande DBF tabellen... nou heb ik dus begrepen dat dit kan met OleDB query's...

Zijn er andere manier of dingen waar ik op moet letten wanneer ik foxpro code gebruik in query's ?
 
Wel in ADO is een query eigenlijk gewoon een string die je uitvoert. Dus eigenlijk is er binnen .net weinig aan (enkel de
Code:
" "
voor een string te openen en te sluiten

dim quary as String = "UPDATE TABEL1 SET FIELD1 =" & ingeladeIniQuery & WHERE RECID = '1'"

De syntax van de query zelf ga je buiten .net moeten controleren. Ditzelfde geld ook voor sql.

succes
 
Ik weet echt wel hoe ik query's moet gebruiken in VB.net, maar ik weet gewoon niet waar ik moet op letten bij de syntax... bijna alles is variabel in mijn query ( Tabel/veld/foxpro code) ... ik moet weten waarom hij het niet pakt....
Ik moet weten wat ik mag en niet mag in OleDb (ADO?) query's....

Soms vraag ik me af waarom er op het internet zo ontzettend weinig informatie over dit onderwerp is.... tot nu toe nog niet 1 voorbeeld kunnen vinden van het opnemen van foxpro code in een OleDB query...

De manier waarop ik dit doe is tog de meest logische?:confused:
 
Wel over de syntax van foxpro ken ik helaas niets maar ik kan me voorstellen dat de manier waarop je dit gebruikt in vb.net gelijkaardig is als sql.
Over die dynamische delen van de query zie ik niet goed waar daar het probleem ligt aangezien je gewoon een string opbouwt met je syntax + variabelen die je inlaadt in je programma.

Verder heeft Oledb geen restricties op queries aangezien Oledb de query gewoon 'vervoert' als een string naar de database waarop deze wordt uitgevoerd. Maw de query moet enkel compatible zijn met je database.

Als laatste wou ik nog even melden dat het misschien te overwegen is over te stappen naar MS SQL server of MS Access, beiden databases die toch meer verspreid en gebruikt zijn.

ps edit: Ik hoop dat je de OleDb driver wel hebt geïnstalleerd : http://www.microsoft.com/downloads/...8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en
 
Laatst bewerkt:
Andere functies waar ik ook OleDB gebruik werken gewoon prima.. de reden dat ik geen SQL gebruik is omdat ik werk met op zichzelfstaande DBF tabellen.
En dan zit ik alsnog met het probleem van Foxpro code op te nemen in de query's.... en van de Foxpro code weetik zeker dat deze prima werkt, omdat deze door een ander programma word aangemaakt/gebruikt. :rolleyes:
 
Kan je misschien even een stuk code tonen (of een voorbeeld van wat je precies wil doen/wat niet werkt in je code) in de ruimere context (dus niet alleen de query maar het hele verhaal)?
 
Ok als je zeker et weet :rolleyes:

Het verhaal: Ik heb een .ini bestand en deze bevat secties(dit zijn de uiteindelijke velden waar input voor word gemaakt dmv de functie die in de sectie staat) en deze worden opgebouwd zoals dit voorbeeld (Dit is er een met een IF functie er zijn ook andere typen maar dat maakt nu niet uit):
Code:
[VELD1]
LOOKUP1   	= IIF(LEN(TRIM(TABLE1->CONTACT))=0,'T','F')
T  		= 
F  		= &(SUBSTR(TABLE1->CONTACT,1,AT(" ",TABLE1->CONTACT)-1))
OVERWRITE 	= 1

In mijn applicatie kun je hier de functie van testen (hij maakt Table1- en Table2.DBF aan om in te testen), de gebruiker moet dan alleen aangeven wat (in dit geval) in het veld CONTACT komt te staan en deze word dan ingevoerd op de juiste plek in de tabel.

Zodra deze sectie word geselecteerd om te testen word er een array gemaakt van alle keys in deze sectie Keyarray(1).item = LOOKUP1 en Keyarray(1).value = IIF(LEN(TRIM(TABLE1->CONTACT))=0,'T','F')
etc...

Dan om te kijken welke functie er word gebruikt kijk of de value die bij LOOKUP1 hoort met IIF begint... zoja dan voer ik de volgende query uit (we nemen nu even aan dat Veld1 in tabel1 staat):
Code:
Dim OleDBcmd1 As New OleDbCommand( _
"UPDATE TABLE1 SET VELD1 = " & Replace(KeyitemArray(1).KeyValue, "->", ".") & " WHERE RECID = '1'", OleDbReader)
OleDBcmd1.ExecuteNonQuery()

(Zie value die hoort bij F in het sectie code) In andere woorden kijkt hij nu in het Contact veld in Table1 en kijkt of de lengte zonder spaties 0 is en zet in het Veld1 een T (als het 0 is) en een F als er wel iets in staat.
En dit werkt ook... er word een F in het veld gezet in de tabel.
uit de array heb ik de value voor T en F als variabel aangemaakt (Truevalue en falsevalue).
Nu lees ik wat er in dat veld is neergezet(Trueorfalse variable) en voer ik de bijhorende value uit de array op dezelfde manier zoals ik de vorige query heb uitgevoerd:

Code:
If TrueorFalse = "F" Then
Dim OleDBcmdTrue As New OleDbCommand( _
"UPDATE TABLE1 SET VELD1 = " & Replace(FalseValue, "->", ".") & " WHERE RECID = '1'", OleDbReader)
OleDBcmdTrue.ExecuteNonQuery()

En hier krijg ik de syntax error...:(
Het enige wat ik tot zover heb aangenomen is dat sql "->" niet herkent en deze vervang ik dus met een punt (Tabel1.Veld1)

EDIT: Wat hebben drivers precies te maken met query's ?....
 
Laatst bewerkt:
Wel data drivers zijn vaak .dll die als data resource gebruikt worden om een specifieke database te benaderen. Vaak kan je database benaderen met standaardprotocollen (ODBC/OLEDB) maar voor sommige database zijn specifieke drivers geschreven die de toegangkelijkheid van de database verbeteren.

Ik heb je probleem even doorlopen en aan collega's voorgelegd maar onze kennis van foxpro is niet voldoende om je probleem op te lossen.

Vandaar zou ik je willen doorverwijzen naar het forum van msdn waar enkele microsoft certified developers zitten die je waarschijnlijk wel gaan kunnen helpen:
http://forums.microsoft.com/msdn/default.aspx?siteid=1

succes
 
Ik ben er eindelijk achter gekomen en ik vind het ook grappig dat zelfs jullie het niet konden zien.

Code:
F  		= &(SUBSTR(TABLE1->CONTACT,1,AT(" ",TABLE1->CONTACT)-1))

In de query die ik liet zien leest VB het als: "&(SUBSTR(TABLE1->CONTACT,1,AT(" en ",TABLE1->CONTACT)-1))"
Hij splitst ze dus in 2en... aangezien de query variabel is geeft VB geen foutmelding totdat je het probeerd te runnen.
Toen ik dus de hele query uitgetypt had in de VB.net editor zag ik een fout: comma, '(', or a valid continuation expected.

En uiteindelijk zag ik dus die " " :confused: en dit heb ik zo lang over het hoofd gezien.... verschrikkelijk!!
 
Fijn dat je het gevonden hebt, ik ging er eigenlijk vanuit dat deze correct was aangezien het eerste wat je moet doen als je een fout op query krijgt is deze afprinten naar een textbestand of messagebox.
 
foxpro

in Windows xp heb ik visual foxpro. ik wil 2 bestanden mergen. bestand.1dbf met cdx en bestand2.dbf met cdx. weet jij hoe het moet ? DE REINDEX werkt volgnes mij niet helemaal. Kun je me helpen ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan